//
//  SXPstatusesViewModel.swift
//  weibo
//
//  Created by shixinPeng on 16/3/1.
//  Copyright © 2016年 shixinPeng. All rights reserved.
//

import UIKit
import AFNetworking

class SXPstatusesViewModel: NSObject {

    //定义数据模型的属性
    var statusesModel:SXPstatusModel?
    /// 认证类型 -1：没有认证，0，认证用户，2,3,5: 企业认证，220: 达人
    ///verified_type
    /// 认证头像
    var verifty_Image:UIImage?{
        switch statusesModel?.user?.verified_type ?? -1 {
        case -1: return nil
        case 0: return UIImage(named: "avatar_vip")
        case 2,3,5: return UIImage(named: "avatar_enterprise_vip")
        case 220: return UIImage(named: "avatar_grassroot")
            
        default: return nil
        }
 
    }
    /// 会员等级图片
    var level_Image:UIImage?{
        
        return UIImage(named: "common_icon_membership_level\(statusesModel?.user?.mbrank ?? 0)")
    }
    
    /// 转发数
    var reposts:String?{
  
            if statusesModel?.reposts_count == 0 {
                return "转发"
            } else {
                if let str = statusesModel?.reposts_count{
                    return "\(str)"
                }
                return "转发"
            }
        
        }
        
    /// 评论数
    var comments:String?{
         if let str = statusesModel?.comments_count{
        
        if str > 0{
            return "\(str)"
            
        }
    }
    return "评论"

    }
    
    /// 赞同数
    var attitudes:String?{
        if let str = statusesModel?.attitudes_count{
            
            if str > 0{
                return "\(str)"
                
            }
        }
        return "赞"
        
    }
    
    var retweetStatusString:String?{
        
        return statusesModel?.retweeted_status?.text
    }
    
    //MARK: 处理微博来源
    func dealSouce(soucreString: String?) -> String? {
        
        //printLog(soucreString)
        //判断是否为空
        guard let source = soucreString else {
            
            return nil
        }
        
        //分割字符串 ..">"
        let sourceArray = source.componentsSeparatedByString(">")
        
        //判断是否是标准的格式
        if sourceArray.count >= 2{
            let subSource = sourceArray[1]
            
            //再次截取
            let finArray = subSource.componentsSeparatedByString("<")
            
            //选取第一部分
            return finArray.first
            
            //获取后半段
        } else {
            return nil
        }
        
    }
    
    //MARK: 显示时间
    func dealCreatedDate(created_at: String?) -> String? {
    
       
        
        // 把 Optional("Thu Mar 03 17:00:03 +0800 2016")时间转换成标准时间
        //判断是否有值
        guard let createdDate = created_at else {
            return nil
        }
        //设置时间格式
        let formatter = NSDateFormatter()
        
        //FIXME:比较时间要设置时区
        formatter.locale = NSLocale(localeIdentifier: "cn")
        
        //设置日期格式
        /*
        设置日期格式 （声明字符串里面每个数字和单词的含义）
        E：星期
        M: 月份
        d：日
        H: 24小时
        m: 分
        s: 秒
        y: 年
        Zone -> Z
        */
        formatter.dateFormat = "EEE MMM dd HH:mm:ss z yyyy"
        
        //转变为设置的时间格式
        let date = formatter.dateFromString(createdDate)
        
        //使用日历进行时间比对 实例化日历
        let calender = NSCalendar.currentCalendar()
        
        //要比较时间,要使用枚举,比较年,月 日,时,分,秒
        let unites = NSCalendarUnit(arrayLiteral: .Year, .Month, .Day,.Hour,.Minute)
        
        //进行比较
        if let Odate = date {
            let compts = calender.components(unites, fromDate: Odate, toDate: NSDate(), options: [])
            /*
            日历可以对时间进行比较
            
            显示逻辑
            
            如果是今年
            
            是今天
            
            1分钟之内 显示 "刚刚"
            
            1小时之内 显示 "xx分钟前"
            
            其他 显示 "xx小时前"
            
            是昨天 显示 "昨天 HH:mm"
            
            其他 显示 "MM-dd HH:mm"
            
            不是今年 显示 "yyyy-MM-dd"
            */
            if compts.year == 0{
                //今年
                if compts.month == 0{
                    //是这个月
                    if compts.day == 0{
                        //是今天
                        if compts.hour == 0{
                            //是一个小时内
                            if compts.minute == 0{
                                //是一个分钟内
                                return "刚刚"
                            }else{
                                //不是一个分钟内,几分钟之前
                                return "\(compts.minute)分钟前"
                            }
                        }else{
                            //不是一个小时内
                            return "\(compts.hour)小时前"
                        }
                    } else if compts.day == 1{
                        //不是今天,格式:昨天 HH:mm
                        formatter.dateFormat = "HH:mm"
                        let str = formatter.stringFromDate(Odate)
                        return "昨天\(str)"
                    } else{
                        //是这个月,除了今天和昨天
                      
                            formatter.dateFormat = "MM-dd HH:mm"
                            let str = formatter.stringFromDate(Odate)
                            return "\(str)"
                
                    }
                }else{
                    //不是这个月
                    formatter.dateFormat = "MM-dd HH:mm"
                    let str = formatter.stringFromDate(Odate)
                    return "其他月\(str)"
                }
                
            }else{
                //不是今年
                formatter.dateFormat = "yyyy-MM-dd HH:mm"
                let str = formatter.stringFromDate(Odate)
                return "\(str)"
            }
        }
        return "\(date)"
    }
    
    
    //定义一个方法过滤文本,把需要替换的图片替换成图片
    func getAttributdString(status: String) -> NSAttributedString? {

        //示例,先解析一段文字
        //let status = "[doge][doge][doge]"
        
        //正则表达式的字符串
        let pattern = "\\[.*?\\]"
        
        //1.创建一个匹配正则的表达式
        
            //这是一个用来匹配的正则表达式
            let expression = try! NSRegularExpression(pattern: pattern, options: [])
        // let expression = try! NSRegularExpression(pattern: pattern, options: [])
            
            //2.使用正则表达式撸字符串
            let results = expression.matchesInString(status, options: [], range: NSMakeRange(0, status.characters.count))
                //let results = expression.matchesInString(status, options: [], range: NSMakeRange(0, status.characters.count))
        //printLog(results)
        
        
            //定义一个attrubute来接收处理后的字符数据
            let attrubute = NSMutableAttributedString(string: status)
        
            //printLog("---\(status)")
            //后后面的开始替换
            var count = results.count
        
        //let attribute = NSMutableAttributedString(string: status)

        
        //var count = results.count
        
        //printLog("查出来的个数::\(count)")
        
            while count-- > 0{
                //取出最后一个搜索出来的坐标
                let result = results[count]
                
                //printLog("第\(count)次--此时的范围是\(result)")
                //查找最后一个要替换的位置
                let subStr = (status as NSString).substringWithRange(result.range)
                
                //查找表情
                if let emotion = SeachEmticon(subStr){
                    
                    //初始化一个附件
                    let attachment = NSTextAttachment()
                    //加载照片
                    let imagePath = "\(emotion.imagPath!)/\(emotion.png!)"
                    attachment.image = UIImage(named: imagePath)
                    //添加到富文本中
                    let imageAttriString = NSAttributedString(attachment: attachment)
                    
                    //处理文本
                    attrubute.replaceCharactersInRange(result.range, withAttributedString: imageAttriString)
                    
                    //设置文字大小
                    //textView.font = UIFont.systemFontOfSize(16)
                    let font = UIFont.systemFontOfSize(16)
                    let h = font.lineHeight
                    //设置图片大小
                    attachment.bounds = CGRectMake(0, -4, h, h)
                    
                
                    
                    //printLog(attrubute)
                    
                   // let subStr = (status as NSString).substringWithRange(result.range)
                }
                
            }
        //printLog("返回结果:\(attrubute)")
        return attrubute
        }

    
    
    
    func SeachEmticon(chs:String) -> SXPEmoticonModel?{
        //在默认表情包里查找
        for emoticon in SXPemoticonManger.defaultArray{
            if emoticon.chs == chs{
                //printLog("找到了")
                return emoticon
            }
        }
        //在浪小花里卖弄查找
        for emoticon in SXPemoticonManger.lxhArray{
            if emoticon.chs == chs{
                //printLog("找到了")
                return emoticon
            }
        }
        return nil
    }
    
    

}

